package com.gome.han.bigdata.spark.core.rdd.operation.transformation

import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.rdd.RDD

/**
 * @author Hanpeng
 * @date 2021/1/12 20:47
 * @description: 至简原则
 *              1,方法体只有一行 {}可以省略
 *              val mapRDD: RDD[Int] = rdd.map((num:Int):Int=>num*2)
 *              2,返回值类型可以推断出来,返回值类型可以省略
 *                val mapRDD: RDD[Int] = rdd.map((num:Int)=>num*2)
 *              3,参数类型可以推断出来 参数类型可以省略
 *              val mapRDD: RDD[Int] = rdd.map((num)=>num*2)
 *              4,参数只有一个,小括号可以省略
 *              val mapRDD: RDD[Int] = rdd.map(num=>num*2)
 *              5,参数只有一个,且在方法体中只出现一次 切按照顺序出现 可以用_代替
 *                参数可以省略
 */
object MapOperation {
  def main(args: Array[String]): Unit = {
    //TODO 准备环境
    val sparkConf:SparkConf = new SparkConf();
    sparkConf.setMaster("local[*]").setAppName("operationMap");
    val sparkContext:SparkContext = new SparkContext(sparkConf);
    //TODO 创建RDD
    //从内存中创建RDD 将内存中集合的数据作为处理的数据源
    val seq: Seq[Int] = Seq[Int](1, 2, 3, 4);
    //并行
    val rdd: RDD[Int] = sparkContext.makeRDD(seq);
    /*  def mapFunc(num:Int):Int={
        num*2;
      }
      val mapRDD: RDD[Int] = rdd.map(mapFunc(_));*/
    //匿名函数
    /*val mapRdd: RDD[Int] = rdd.map((num: Int) => {
      num * 2;
    });*/
    //
   /* val mapRdd: RDD[Int] = rdd.map((num: Int) => {
      num * 2;
    });*/
    //val mapRdd: RDD[Int] = rdd.map((num: Int) => num * 2);
    // 可以是类型或者是值得转换
    val mapRdd: RDD[Int] = rdd.map(_* 2);

    //rdd.collect().foreach(i => println(i))
    //rdd.collect().foreach(println(_));
    //返回一个数组 里面包含RDD的所有元素
    mapRdd.collect().foreach(println);
    // TODO 关闭环境
    sparkContext.stop()
  }
}
